// 封装购物车模块

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'
export const useCarStore = defineStore('cart', () => {

    // 定义state-cartList
    const cartList = ref([])
    // 2定义action-addCart
    const addCart = async(goods) => {
        //添加购物车操作
        //已经添加过-count+1
        //没有添加过 - 直接push
        //通过skuID判断
        const item = cartList.value.find((item) => goods.skuId === item.skuId)
        if (item) {
            // 找到了
            item.count++

        } else {
            //没有找到
            cartList.value.push(goods)
        }       
        
    }

    // 删除购物车
    const delCart = async (skuId) => {
      
          // 思路：
          // 1. 找到要删除项的下标值 - splice
          // 2. 使用数组的过滤方法 - filter
          const idx = cartList.value.findIndex((item) => skuId === item.skuId)
          cartList.value.splice(idx, 1)
        
      }
      //清除购物车
      const clearCart =()=>{
        cartList.value=[]
      }
    // 单选功能
    const singleCheck = (skuId, selected) => {
        // 通过skuId找到要修改的那一项 然后把他的select修改为我们传过的selected
        const item = cartList.value.find((item) => item.skuId === skuId)
        item.selected = selected
    }
    // 全选功能
    const allCheck = (selected) => {
        //把carList的select修改为我们传过的selected
        cartList.value.forEach(item => item.selected = selected)
    }
    //计算属性
    // 1总的数量 所有项的count之和
    const allCount = computed(() => cartList.value.reduce((a, c) => a + c.count, 0))
    // 2总的数量 所有项的count*price之和
    const allPrice = computed(() => cartList.value.reduce((a, c) => a + c.count * c.price, 0))
    // 3. 已选择数量
    const selectedCount = computed(() => cartList.value.filter(item => item.selected).reduce((a, c) => a + c.count, 0))
    // 4. 已选择商品价钱合计
    const selectedPrice = computed(() => cartList.value.filter(item => item.selected).reduce((a, c) => a + c.count * c.price, 0))
    //5 已经选中的商品

    // 是否全选
    const isAll = computed(() => cartList.value.every((item) => item.selected))

    //选中的购物车列表  
    const selectCart = ref([])
    const getSelectCar = async()=>{  
       selectCart.value =await cartList.value.filter(item => item.selected)
       return selectCart.value   
    }
    
    return {
      //购物车数据
        cartList,
        //加入购物车
        addCart,
        //删除购物车
        delCart,
        //总数量
        allCount,
        //总金额
        allPrice,
        // 单选功能
        singleCheck,
        //全选
        isAll,
        //选中的购物车商品
        getSelectCar,
        selectCart,

        selectedCount,
        selectedPrice,
        clearCart,
        allCheck,
    
        // updateNewList
    }

}, {
    persist:true,
})